home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 37 / IOPROG_37.ISO / SOFT / Multilizer.exe / disk1 / data1.cab / data1 / [Group9]VCL Source Standard / odbc.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1999-08-12  |  12.7 KB  |  547 lines

  1. unit Odbc;
  2.  
  3. interface
  4.  
  5. const
  6.   SQL_ODBC_VER = 10;
  7.  
  8.   SQL_SUCCESS = 0;
  9.   SQL_SUCCESS_WITH_INFO = 1;
  10.   SQL_NO_DATA = 100;
  11.   SQL_NO_TOTAL = -4;
  12.  
  13.   SQL_COMMIT = 0;
  14.   SQL_ROLLBACK = 1;
  15.  
  16.   SQL_PARAM_INPUT = 1;
  17.  
  18.   SQL_NULL_DATA = -1;
  19.   SQL_NTS = -3;
  20.  
  21.  
  22.   SQL_CLOSE = 0;
  23.   SQL_DROP = 1;
  24.   SQL_UNBIND = 2;
  25.   SQL_RESET_PARAMS = 3;
  26.  
  27.  
  28.   SQL_FETCH_NEXT = 1;
  29.   SQL_FETCH_FIRST = 2;
  30.   SQL_FETCH_LAST = 3;
  31.   SQL_FETCH_PRIOR = 4;
  32.   SQL_FETCH_ABSOLUTE = 5;
  33.   SQL_FETCH_RELATIVE = 6;
  34.  
  35.  
  36.   SQL_HANDLE_ENV = 1;
  37.   SQL_HANDLE_DBC = 2;
  38.   SQL_HANDLE_STMT = 3;
  39.   SQL_HANDLE_DESC = 4;
  40.  
  41.  
  42.   SQL_NULL_HANDLE = nil;
  43.  
  44.  
  45.   SQL_ATTR_ODBC_VERSION = 200;
  46.   SQL_OV_ODBC2 = 2;
  47.   SQL_OV_ODBC3 = 3;
  48.   SQL_IS_INTEGER = -6;
  49.  
  50.   // Connection attributes
  51.   SQL_ACCESS_MODE        = 101;
  52.   SQL_AUTOCOMMIT         = 102;
  53.   SQL_LOGIN_TIMEOUT      = 103;
  54.   SQL_OPT_TRACE          = 104;
  55.   SQL_OPT_TRACEFILE      = 105;
  56.   SQL_TRANSLATE_DLL      = 106;
  57.   SQL_TRANSLATE_OPTION   = 107;
  58.   SQL_TXN_ISOLATION      = 108;
  59.   SQL_CURRENT_QUALIFIER  = 109;
  60.   SQL_ODBC_CURSORS       = 110;
  61.   SQL_QUIET_MODE         = 111;
  62.   SQL_PACKET_SIZE        = 112;
  63.  
  64.   // SQL_AUTOCOMMIT options
  65.   SQL_AUTOCOMMIT_OFF     = 0;
  66.   SQL_AUTOCOMMIT_ON      = 1;
  67.   SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON;
  68.  
  69.   //  SQL types
  70.   SQL_BIGINT = -5;
  71.   SQL_BINARY = -2;
  72.   SQL_BIT = -7;
  73.   SQL_CHAR = 1;
  74.   SQL_DATE = 9;
  75.   SQL_DECIMAL = 3;
  76.   SQL_DOUBLE = 8;
  77.   SQL_FLOAT = 6;
  78.   SQL_INTEGER = 4;
  79.   SQL_LONGVARBINARY = -4;
  80.   SQL_LONGVARCHAR = -1;
  81.   SQL_NUMERIC = 2;
  82.   SQL_REAL = 7;
  83.   SQL_SMALLINT = 5;
  84.   SQL_TIME = 10;
  85.   SQL_TIMESTAMP = 11;
  86.   SQL_TINYINT = -6;
  87.   SQL_VARBINARY = -3;
  88.   SQL_VARCHAR = 12;
  89.  
  90.  
  91.   // C types
  92.   SQL_C_BINARY = SQL_BINARY;
  93.   SQL_C_BIT = SQL_BIT;
  94.   SQL_C_CHAR = SQL_CHAR;
  95.   SQL_C_DATE = SQL_DATE;
  96.   SQL_C_DEFAULT = 0;
  97.   SQL_C_DOUBLE = SQL_DOUBLE;
  98.   SQL_C_FLOAT = SQL_FLOAT;
  99.   SQL_C_SLONG = SQL_INTEGER - 20;
  100.   SQL_C_SSHORT = SQL_INTEGER;
  101.   SQL_C_STINYINT = SQL_INTEGER;
  102.   SQL_C_TIME = SQL_TIME;
  103.   SQL_C_TIMESTAMP = SQL_TIMESTAMP;
  104.   SQL_C_ULONG = SQL_INTEGER - 20;
  105.   SQL_C_USHORT = SQL_INTEGER;
  106.   SQL_C_UTINYINT = SQL_INTEGER;
  107.  
  108.   SQL_TXN_CAPABLE = 46;
  109.  
  110.   // SQL_TXN_CAPABLE values
  111.  
  112.   SQL_TC_NONE = 0;
  113.   SQL_TC_DML = 1;
  114.   SQL_TC_ALL = 2;
  115.   SQL_TC_DDL_COMMIT = 3;
  116.   SQL_TC_DDL_IGNORE = 4;
  117.  
  118.  
  119. type
  120.   TOdbcHandle = Pointer;
  121.   TOdbcRetCode = Smallint;
  122.  
  123.   TOdbcDateStruct = record
  124.     year: Word;
  125.     month: Word;
  126.     day: Word;
  127.   end;
  128.  
  129.   TOdbcTimeStruct = record
  130.     hour: Word;
  131.     minute: Word;
  132.     second: Word;
  133.   end;
  134.  
  135.   TOdbcTimestampStruct = record
  136.     year: Word;
  137.     month: Word;
  138.     day: Word;
  139.     hour: Word;
  140.     minute: Word;
  141.     second: Word;
  142.     fraction: Longint;
  143.   end;
  144.  
  145. // Handles
  146.  
  147. {$IFDEF IVSTATICODBC}
  148. function SQLAllocEnv
  149. {$ELSE}
  150. TSQLAllocEnv = function
  151. {$ENDIF}
  152. (var handle: TOdbcHandle): TOdbcRetCode; stdcall;
  153.  
  154. {$IFDEF IVSTATICODBC}
  155. function SQLFreeEnv
  156. {$ELSE}
  157. TSQLFreeEnv = function
  158. {$ENDIF}
  159. (handle: TOdbcHandle): TOdbcRetCode; stdcall;
  160.  
  161. {$IFDEF IVSTATICODBC}
  162. function SQLAllocConnect
  163. {$ELSE}
  164. TSQLAllocConnect = function
  165. {$ENDIF}
  166. (envHandle: Pointer; var handle: TOdbcHandle): TOdbcRetCode; stdcall;
  167.  
  168. {$IFDEF IVSTATICODBC}
  169. function SQLFreeConnect
  170. {$ELSE}
  171. TSQLFreeConnect = function
  172. {$ENDIF}
  173. (handle: TOdbcHandle): TOdbcRetCode; stdcall;
  174.  
  175. {$IFDEF IVSTATICODBC}
  176. function SQLAllocStmt
  177. {$ELSE}
  178. TSQLAllocStmt = function
  179. {$ENDIF}
  180. (connectHandle: Pointer; var handle: TOdbcHandle): TOdbcRetCode; stdcall;
  181.  
  182. {$IFDEF IVSTATICODBC}
  183. function SQLFreeStmt
  184. {$ELSE}
  185. TSQLFreeStmt = function
  186. {$ENDIF}
  187. (handle: TOdbcHandle; option: Word): TOdbcRetCode; stdcall;
  188.  
  189.  
  190. // Connection
  191.  
  192. {$IFDEF IVSTATICODBC}
  193. function SQLGetInfo
  194. {$ELSE}
  195. TSQLGetInfo = function
  196. {$ENDIF}
  197. (connectionHandle: TOdbcHandle;
  198.  infoType: Word;
  199.  infoValue: Pointer;
  200.  bufferLength: Word;
  201.  var stringLength: Word): TOdbcRetCode; stdcall;
  202.  
  203. {$IFDEF IVSTATICODBC}
  204. function SQLConnect
  205. {$ELSE}
  206. TSQLConnect = function
  207. {$ENDIF}
  208. (connect: TOdbcHandle;
  209.  dataSource: PChar;
  210.  dataSourceLength: Integer;
  211.  userId: PChar;
  212.  userIdLength: Integer;
  213.  password: PChar;
  214.  passwordLength: Integer): TOdbcRetCode; stdcall;
  215.  
  216. {$IFDEF IVSTATICODBC}
  217. function SQLSetConnectOption
  218. {$ELSE}
  219. TSQLSetConnectOption = function
  220. {$ENDIF}
  221. (connectionHandle: TOdbcHandle;
  222.  option: Word;
  223.  param: Longint): TOdbcRetCode; stdcall;
  224.  
  225. {$IFDEF IVSTATICODBC}
  226. function SQLTransact
  227. {$ELSE}
  228. TSQLTransact = function
  229. {$ENDIF}
  230. (environmentHandle: TOdbcHandle;
  231.  connectionHandle: Pointer;
  232.  param: Word): TOdbcRetCode; stdcall;
  233.  
  234. {$IFDEF IVSTATICODBC}
  235. function SQLExecDirect
  236. {$ELSE}
  237. TSQLExecDirect = function
  238. {$ENDIF}
  239. (connect: TOdbcHandle;
  240.  sql: PChar;
  241.  sqlLength: LongInt): TOdbcRetCode; stdcall;
  242.  
  243. {$IFDEF IVSTATICODBC}
  244. function SQLPrepare
  245. {$ELSE}
  246. TSQLPrepare = function
  247. {$ENDIF}
  248. (connect: TOdbcHandle;
  249.  sql: PChar;
  250.  sqlLength: LongInt): TOdbcRetCode; stdcall;
  251.  
  252. {$IFDEF IVSTATICODBC}
  253. function SQLExecute
  254. {$ELSE}
  255. TSQLExecute = function
  256. {$ENDIF}
  257. (statementHandle: TOdbcHandle): TOdbcRetCode; stdcall;
  258.  
  259. {$IFDEF IVSTATICODBC}
  260. function SQLFetch
  261. {$ELSE}
  262. TSQLFetch = function
  263. {$ENDIF}
  264. (statementHandle: TOdbcHandle): TOdbcRetCode; stdcall;
  265.  
  266. {$IFDEF IVSTATICODBC}
  267. function SQLExtendedFetch
  268. {$ELSE}
  269. TSQLExtendedFetch = function
  270. {$ENDIF}
  271. (statementHandle: TOdbcHandle;
  272.  fetchOrientation: Smallint;
  273.  fetchOffset: Integer;
  274.  var rowCount: Integer;
  275.  var rowStatus: SMallint): TOdbcRetCode; stdcall;
  276.  
  277. {$IFDEF IVSTATICODBC}
  278. function SQLFetchScroll
  279. {$ELSE}
  280. TSQLFetchScroll = function
  281. {$ENDIF}
  282. (statementHandle: TOdbcHandle;
  283.  fetchOrientation: Smallint;
  284.  fetchOffset: Integer): TOdbcRetCode; stdcall;
  285.  
  286. {$IFDEF IVSTATICODBC}
  287. function SQLNumResultCols
  288. {$ELSE}
  289. TSQLNumResultCols = function
  290. {$ENDIF}
  291. (statementHandle: TOdbcHandle; var columnCount: Smallint): TOdbcRetCode; stdcall;
  292.  
  293. {$IFDEF IVSTATICODBC}
  294. function SQLNumParams
  295. {$ELSE}
  296. TSQLNumParams = function
  297. {$ENDIF}
  298. (statementHandle: TOdbcHandle; var parameterCount: Smallint): TOdbcRetCode; stdcall;
  299.  
  300. {$IFDEF IVSTATICODBC}
  301. function SQLError
  302. {$ELSE}
  303. TSQLError = function
  304. {$ENDIF}
  305. (env: TOdbcHandle;
  306.  hdbc: TOdbcHandle;
  307.  hstmt: TOdbcHandle;
  308.  SQLState: PChar;
  309.  var NativeError: Integer;
  310.  Buffer: PChar;
  311.  Buflen: Integer;
  312.  var Outlen: Integer): TOdbcRetCode; stdcall;
  313.  
  314. {$IFDEF IVSTATICODBC}
  315. function SQLDescribeCol
  316. {$ELSE}
  317. TSQLDescribeCol = function
  318. {$ENDIF}
  319. (statementHandle: TOdbcHandle;
  320.  columnNumber: Smallint;
  321.  columnName: PChar;
  322.  bufferLength: Smallint;
  323.  var nameLength: Smallint;
  324.  var dataType: Smallint;
  325.  var columnSize: Integer;
  326.  var decimalDigits: Smallint;
  327.  var nullable: Smallint): TOdbcRetCode; stdcall;
  328.  
  329. {$IFDEF IVSTATICODBC}
  330. function SQLBindCol
  331. {$ELSE}
  332. TSQLBindCol = function
  333. {$ENDIF}
  334. (statementHandle: TOdbcHandle;
  335.  columnNumber: Smallint;
  336.  targetType: Smallint;
  337.  targetTypePrt: Pointer;
  338.  bufferLength: Integer;
  339.  var strLen: Integer): TOdbcRetCode; stdcall;
  340.  
  341. {$IFDEF IVSTATICODBC}
  342. function SQLGetData
  343. {$ELSE}
  344. TSQLGetData = function
  345. {$ENDIF}
  346. (statementHandle: TOdbcHandle;
  347.  columnNumber: Smallint;
  348.  targetType: Smallint;
  349.  targetTypePrt: Pointer;
  350.  bufferLength: Integer;
  351.  var strLen: Integer): TOdbcRetCode; stdcall;
  352.  
  353. {$IFDEF IVSTATICODBC}
  354. function SQLDescribeParam
  355. {$ELSE}
  356. TSQLDescribeParam = function
  357. {$ENDIF}
  358. (hstmt: TOdbcHandle;
  359.  ipar: Word;
  360.  var fSqlType: Smallint;
  361.  var cbColDef: Longint;
  362.  var ibScale: Smallint;
  363.  var fNullable: Smallint): TOdbcRetCode; stdcall;
  364.  
  365. {$IFDEF IVSTATICODBC}
  366. function SQLBindParameter
  367. {$ELSE}
  368. TSQLBindParameter = function
  369. {$ENDIF}
  370. (hstmt: TOdbcHandle;
  371.  ipar: Word;
  372.  fParamType: Smallint;
  373.  cType: Smallint;
  374.  fSqlType: Smallint;
  375.  cbColDef: Integer;
  376.  ibScale: Smallint;
  377.  rgbValue: Pointer;
  378.  cbValueMax: Integer;
  379.  var pcbValue: Integer): TOdbcRetCode; stdcall;
  380.  
  381. {$IFDEF IVSTATICODBC}
  382. function SQLDataSources
  383. {$ELSE}
  384. TSQLDataSources = function
  385. {$ENDIF}
  386. (environmentHandle: TOdbcHandle;
  387.  direction: Word;
  388.  serverName: PChar;
  389.  bufferLength1: Smallint;
  390.  var nameLength1: Smallint;
  391.  descriction: PChar;
  392.  bufferLength2: Smallint;
  393.  var nameLength2: Smallint): TOdbcRetCode; stdcall;
  394.  
  395. {$IFDEF IVSTATICODBC}
  396. function SQLTables
  397. {$ELSE}
  398. TSQLTables = function
  399. {$ENDIF}
  400. (statementHandle: TOdbcHandle;
  401.  catalogName: PChar;
  402.  nameLength1: Smallint;
  403.  schemaName: PChar;
  404.  nameLength2: Smallint;
  405.  tableName: PChar;
  406.  nameLength3: Smallint;
  407.  tableType: PChar;
  408.  nameLength4: Smallint): TOdbcRetCode; stdcall;
  409.  
  410. procedure CheckODBCSupport;
  411. function IsODBCAvailable: Boolean;
  412.  
  413. {$IFNDEF IVSTATICODBC}
  414. var
  415.   SQLAllocEnv: TSQLAllocEnv;
  416.   SQLFreeEnv: TSQLFreeEnv;
  417.   SQLAllocConnect: TSQLAllocConnect;
  418.   SQLFreeConnect: TSQLFreeConnect;
  419.   SQLAllocStmt: TSQLAllocStmt;
  420.   SQLFreeStmt: TSQLFreeStmt;
  421.   SQLGetInfo: TSQLGetInfo;
  422.   SQLBindCol: TSQLBindCol;
  423.   SQLBindParameter: TSQLBindParameter;
  424.   SQLConnect: TSQLConnect;
  425.   SQLDataSources: TSQLDataSources;
  426.   SQLDescribeCol: TSQLDescribeCol;
  427.   SQLDescribeParam: TSQLDescribeParam;
  428.   SQLError: TSQLError;
  429.   SQLExecDirect: TSQLExecDirect;
  430.   SQLExecute: TSQLExecute;
  431.   SQLExtendedFetch: TSQLExtendedFetch;
  432.   SQLFetch: TSQLFetch;
  433.   SQLFetchScroll: TSQLFetch;
  434.   SQLGetData: TSQLGetData;
  435.   SQLNumParams: TSQLNumParams;
  436.   SQLNumResultCols: TSQLNumResultCols;
  437.   SQLPrepare: TSQLPrepare;
  438.   SQLSetConnectOption: TSQLSetConnectOption;
  439.   SQLTables: TSQLTables;
  440.   SQLTransact: TSQLTransact;
  441. {$ENDIF}
  442.  
  443. implementation
  444.  
  445. {$IFNDEF IVSTATICODBC}
  446. uses
  447.   Windows, SysUtils;
  448.  
  449. var
  450.   module: THandle;
  451. {$ENDIF}
  452.  
  453. function IsODBCAvailable: Boolean;
  454. begin
  455. {$IFDEF IVSTATICODBC}
  456.   Result := True;
  457. {$ELSE}
  458.   Result := module <> 0;
  459. {$ENDIF}
  460. end;
  461.  
  462. procedure CheckODBCSupport;
  463. begin
  464. {$IFNDEF IVSTATICODBC}
  465.   if not IsODBCAvailable then;
  466.     raise Exception.Create('ODBC is not supported');
  467. {$ENDIF}
  468. end;
  469.  
  470. {$IFDEF IVSTATICODBC}
  471. function SQLAllocEnv; stdcall; external 'ODBC32.DLL'
  472. function SQLFreeEnv; stdcall; external 'ODBC32.DLL'
  473. function SQLAllocConnect; stdcall; external 'ODBC32.DLL'
  474. function SQLFreeConnect; stdcall; external 'ODBC32.DLL'
  475. function SQLAllocStmt; stdcall; external 'ODBC32.DLL'
  476. function SQLFreeStmt; stdcall; external 'ODBC32.DLL'
  477. function SQLGetInfo; stdcall; external 'ODBC32.DLL'
  478. function SQLBindCol; stdcall; external 'ODBC32.DLL'
  479. function SQLBindParameter; stdcall; external 'ODBC32.DLL'
  480. function SQLConnect; stdcall; external 'ODBC32.DLL'
  481. function SQLDataSources; stdcall; external 'ODBC32.DLL'
  482. function SQLDescribeCol; stdcall; external 'ODBC32.DLL'
  483. function SQLDescribeParam; stdcall; external 'ODBC32.DLL'
  484. function SQLError; stdcall; external 'ODBC32.DLL'
  485. function SQLExecDirect; stdcall; external 'ODBC32.DLL'
  486. function SQLExecute; stdcall; external 'ODBC32.DLL'
  487. function SQLExtendedFetch; stdcall; external 'ODBC32.DLL'
  488. function SQLFetch; stdcall; external 'ODBC32.DLL'
  489. function SQLFetchScroll; stdcall; external 'ODBC32.DLL'
  490. function SQLGetData; stdcall; external 'ODBC32.DLL'
  491. function SQLNumParams; stdcall; external 'ODBC32.DLL'
  492. function SQLNumResultCols; stdcall; external 'ODBC32.DLL'
  493. function SQLPrepare; stdcall; external 'ODBC32.DLL'
  494. function SQLSetConnectOption; stdcall; external 'ODBC32.DLL'
  495. function SQLTables; stdcall; external 'ODBC32.DLL'
  496. function SQLTransact; stdcall; external 'ODBC32.DLL'
  497.  
  498. {$ELSE}
  499.  
  500. function GetAddress(const name: String): TFarProc;
  501. begin
  502.   Result := GetProcAddress(module, PChar(name));
  503.   if Result = nil then
  504.     raise Exception.Create(name + ' function not found');
  505. end;
  506.  
  507. initialization
  508. {$IFDEF NOODBC}
  509.   module := 0;
  510. {$ELSE}
  511.   module := LoadLibrary('ODBC32.DLL');
  512. {$ENDIF}
  513.   if module <> 0 then
  514.   begin
  515.     SQLAllocEnv := GetAddress('SQLAllocEnv');
  516.     SQLFreeEnv := GetAddress('SQLFreeEnv');
  517.     SQLAllocConnect := GetAddress('SQLAllocConnect');
  518.     SQLFreeConnect := GetAddress('SQLFreeConnect');
  519.     SQLAllocStmt := GetAddress('SQLAllocStmt');
  520.     SQLFreeStmt := GetAddress('SQLFreeStmt');
  521.     SQLGetInfo := GetAddress('SQLGetInfo');
  522.     SQLBindCol := GetAddress('SQLBindCol');
  523.     SQLBindParameter := GetAddress('SQLBindParameter');
  524.     SQLConnect := GetAddress('SQLConnect');
  525.     SQLDataSources := GetAddress('SQLDataSources');
  526.     SQLDescribeCol := GetAddress('SQLDescribeCol');
  527.     SQLDescribeParam := GetAddress('SQLDescribeParam');
  528.     SQLError := GetAddress('SQLError');
  529.     SQLExecDirect := GetAddress('SQLExecDirect');
  530.     SQLExecute := GetAddress('SQLExecute');
  531.     SQLExtendedFetch := GetAddress('SQLExtendedFetch');
  532.     SQLFetch := GetAddress('SQLFetch');
  533.     SQLFetchScroll := GetAddress('SQLFetch');
  534.     SQLGetData := GetAddress('SQLGetData');
  535.     SQLNumParams := GetAddress('SQLNumParams');
  536.     SQLNumResultCols := GetAddress('SQLNumResultCols');
  537.     SQLPrepare := GetAddress('SQLPrepare');
  538.     SQLSetConnectOption := GetAddress('SQLSetConnectOption');
  539.     SQLTables := GetAddress('SQLTables');
  540.     SQLTransact := GetAddress('SQLTransact');
  541.   end;
  542. finalization
  543.   if module <> 0 then
  544.     FreeLibrary(module);
  545. {$ENDIF}
  546. end.
  547.